home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 680 / sattrack / ifflib20.lzh / Examples / Expander.mod < prev    next >
Text File  |  1990-07-31  |  4KB  |  135 lines

  1. (* ---------------------------------------------------------------------------
  2.  
  3.     Expander.mod - stores IFF-ILBMs in uncompressed format
  4.  
  5.     Requires Christian A. Weber's "iff.library" and the appropriate
  6.     DEFINITION MODULE which can be found in the library distribution.
  7.     By Olivier Schraner, Roggenweg 6, 5036 Oberentfelden/AG, Switzerland
  8.     for A+L's "M2Amiga" Modula-2 Compiler V3.3
  9.  
  10.     VER 2 REV 04 on 31-Jul-90 (first public release)
  11.  
  12.     This is public domain - hack it up as you please!
  13.  
  14. --------------------------------------------------------------------------- *)
  15. MODULE Expander;
  16.  
  17. FROM SYSTEM    IMPORT    ADR,ADDRESS;
  18. FROM Arguments    IMPORT    NumArgs,GetArg;
  19. FROM Arts    IMPORT    Assert,CurrentLevel,Terminate;
  20. FROM Graphics    IMPORT    LoadRGB4,ScrollVPort;
  21. FROM Intuition    IMPORT    OpenScreen,CloseScreen,NewScreen,ScreenPtr,
  22.             ScreenFlags,ScreenFlagSet;
  23. FROM Terminal    IMPORT    WriteString,WriteLn;
  24. IMPORT IFF;
  25.  
  26. VAR
  27.   argc        : INTEGER;
  28.   argv        : ARRAY [0..255] OF CHAR;
  29.   arglen    : INTEGER;
  30.   cnt        : INTEGER;
  31.   ifffile    : ADDRESS;
  32.   bmhd        : IFF.BitMapHeaderPtr;
  33.   ns        : NewScreen;
  34.   scr        : ScreenPtr;
  35.   coltab    : ARRAY [0..63] OF CARDINAL;
  36.   numcol    : LONGINT;
  37.  
  38.  
  39. PROCEDURE WriteErr(err : INTEGER);
  40.  
  41. BEGIN (* WriteErr *)
  42.  
  43.   CASE err OF
  44.     IFF.cantOpenFile    : WriteString("Couldn't open file!") |
  45.     IFF.readError    : WriteString("Error reading file!") |
  46.     IFF.noMem        : WriteString("Not enough memory!") |
  47.     IFF.notIFF        : WriteString("Not an IFF file!") |
  48.     IFF.writeError    : WriteString("Error writing file!") |
  49.     IFF.noILBM        : WriteString("Not an IFF-ILBM file!") |
  50.     IFF.noBMHD        : WriteString("Contains no BMHD chunk!") |
  51.     IFF.noBODY        : WriteString("Contains no BODY chunk!") |
  52.     IFF.tooManyPlanes    : WriteString("BODY has more planes than your BitMap!") |
  53.     IFF.unknownCompression: WriteString("Unknown compression algorithm!") |
  54.     101            : WriteString("Unable to open screen!") |
  55.     102            : WriteString("Contains no CMAP chunk!")
  56.   END; (* CASE *)
  57.   WriteLn
  58.  
  59. END WriteErr;
  60.  
  61.  
  62. PROCEDURE InitNS();
  63.  
  64. BEGIN (* InitNS *)
  65.  
  66.   WITH ns DO
  67.     leftEdge:=0; topEdge:=0; width:=bmhd^.w; height:=bmhd^.h;
  68.     depth:=INTEGER(bmhd^.nPlanes); detailPen:=0; blockPen:=0;
  69.     viewModes:=IFF.GetViewModes(ifffile);
  70.     type:=ScreenFlagSet{wbenchScreen..sf3,screenBehind,screenQuiet};
  71.     font:=NIL; defaultTitle:=NIL; gadgets:=NIL; customBitMap:=NIL;
  72.   END (* WITH *)
  73.  
  74. END InitNS;
  75.  
  76.  
  77. BEGIN (* Expander *)
  78.  
  79.   WriteString("Expander v2.03   1990 by Finch of Nightmare Prod."); WriteLn;
  80.  
  81.   argc:=NumArgs();
  82.   IF argc<1 THEN
  83.     WriteString("Usage: Expander Files/..."); WriteLn;
  84.     Terminate(CurrentLevel())
  85.   END; (* IF *)
  86.   GetArg(1,argv,arglen);
  87.   IF argv[0]="?" THEN
  88.     WriteString("Usage: Expander Files/..."); WriteLn;
  89.     Terminate(CurrentLevel());
  90.   END; (* IF *)
  91.  
  92.   FOR cnt:=1 TO argc DO
  93.     GetArg(cnt,argv,arglen);
  94.     WriteString(argv); WriteString(": ");
  95.     ifffile:=IFF.OpenIFF(ADR(argv));
  96.     IF ifffile=NIL THEN
  97.       WriteErr(IFF.IFFError());
  98.     ELSE
  99.       bmhd:=IFF.GetBMHD(ifffile);
  100.       IF bmhd=NIL THEN
  101.         WriteErr(IFF.IFFError());
  102.       ELSE
  103.         InitNS();
  104.         scr:=OpenScreen(ns);
  105.         IF scr=NIL THEN
  106.           WriteErr(101);
  107.         ELSE
  108.           IF NOT(IFF.DecodePic(ifffile,ADR(scr^.bitMap))) THEN
  109.             WriteErr(IFF.IFFError());
  110.           ELSE
  111.             numcol:=IFF.GetColorTab(ifffile,ADR(coltab));
  112.             IF numcol=0 THEN
  113.               WriteErr(102);
  114.             ELSE
  115.               IFF.CloseIFF(ifffile); ifffile:=NIL;
  116.               LoadRGB4(ADR(scr^.viewPort),ADR(coltab),INTEGER(numcol));
  117.               ScrollVPort(ADR(scr^.viewPort));
  118.               IF NOT(IFF.SaveBitMap(ADR(argv),ADR(scr^.bitMap),
  119.                                     scr^.viewPort.colorMap^.colorTable,
  120.                                     IFF.CompressionFlagSet{})) THEN
  121.                 WriteErr(IFF.IFFError());
  122.               ELSE
  123.                 WriteString("successfully expanded."); WriteLn;
  124.               END (* IF *)
  125.             END (* IF *)
  126.           END (* IF *)
  127.         END (* IF *)
  128.       END (* IF *)
  129.     END; (* IF *)
  130.     IF ifffile#NIL THEN IFF.CloseIFF(ifffile); END;
  131.     IF scr#NIL THEN CloseScreen(scr); END
  132.   END (* FOR *)
  133.  
  134. END Expander.
  135.